/**
 * @file breathing.h
 * @author TimeChicken (https://gitee.com/Time--Chicken)
 * @brief 监听报文解析服务
 * @version 0.1
 * @date 2021-08-23
 * 
 * @copyright Copyright (c) 2021
 * 
 */
#ifndef __BREATHING_H__
#define __BREATHING_H__

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>

// #include <linux/input.h>
// #include <linux/fb.h>
#include <sys/ioctl.h>
#include <stdbool.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>

#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include "global.h"
#include "fri_manage.h"

// 数据包类型
#define PACK_ONLINE 1     //上线报文
#define PACK_ONLINE_REC 2 //上线响应报文
#define PACK_OFFLINE 3    //下线报文
#define PACK_MSG 10       //消息报文
#define PACK_MSG_FILE 11  //发送文件消息报文，开发难度较大

typedef struct data_packet
{
    in_addr_t ip;      //IP地址(网络字节序)
    char mac[6];       //MAC地址二进制
    in_port_t port;    //端口号
    char connect_type; //连接类型
    char packet_type;  //数据包类型
    char cmd;          //命令符号
    char placeholder;  //占位符，无用
    int length;        //数据长度
} data_packet;

void *wait_for_otherClient_to_respond(void *argv);
void *msg_processing(void *argv);
void friends_online(data_packet *d_p);
void friends_online_rec(data_packet *d_p);
void friends_offline(data_packet *d_p);
void rec_msg(data_packet *d_p);
void send_data(data_packet *send_d_p, char *send_data);
data_packet *msgQueue_out_dataPacket();
int msgQueue_in_dataPacket(data_packet *d_p);

#endif /* __BREATHING_H__ */
